#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
    if (argc != 2)
    {
        printf("请输入数据包类型\n");
        return 1;
    }
    // 创建一个密钥
    key_t key = ftok(".", 123);
    if (key == -1)
    {
        perror("创建密钥失败\n");
        return 1;
    }
    // 打印密钥
    printf("创建密钥成功\n");

    // 创建一个消息队列
    int msgid = msgget(key,IPC_CREAT|0777);
    if (msgid == -1)
    {
        perror("创建消息队列失败\n");
    }
    printf("创建消息队列成功\n");

    // 接收消息包
    struct msgbuf
    {
        long mtype;
        char mtext[1024];
    };

    struct msgbuf msg;
    int ret = msgrcv(msgid,&msg,1024, atoi(argv[1]),0);
    if (ret == -1)
    {
        perror("接收消息失败\n");
    }
    else
    {
        printf("接收到的消息类型为:%ld\n", msg.mtype);
        printf("接收到的消息为:%s\n",msg.mtext);
    }

    return 0;
}
